/*
* This file is a part of the open-eBackup project.
* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
* If a copy of the MPL was not distributed with this file, You can obtain one at
* http://mozilla.org/MPL/2.0/.
*
* Copyright (c) [2024] Huawei Technologies Co.,Ltd.
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
*/
#ifndef LIVEMOUNT_JOB_MANAGER_H
#define LIVEMOUNT_JOB_MANAGER_H

#include <unordered_map>
#include <mutex>
#include <string>

enum class LivemountJobStatus {
    INIT,
    PENDING,
    SUCCESS,
    FAILED,
    INVALID
};

class LivemountJobManager {
public:
    static LivemountJobManager& GetInstance();
    int RegisterJob(const std::string& jobId, LivemountJobStatus status = LivemountJobStatus::INIT);
    int UpdateJobStatus(const std::string& jobId, LivemountJobStatus status);
    LivemountJobStatus GetJobStatus(const std::string& jobId);
    void RemoveJob(const std::string& jobId);

private:
    LivemountJobManager();
    ~LivemountJobManager();

    std::mutex m_mtx;
    std::unordered_map<std::string, LivemountJobStatus> m_jobStatusMap;
};

#endif